N予備校2018冬のwebアプリコンテスト提出用の記事になります。 コンテスト内容は以下のリンク先から https://progedu.github.io/web-contests/webcontest2018-winter/
[elf-farm]URL: https://mono-alex.github.io/elf-farm/ というlinebotの制作過程をこちらに記載していきます。 時間が取れればQittaにまとめていきたい。
このアプリ(elf-farm)の目的
このLINE botのコンセプトは以下のように決めました。 キャラクター(chatbot)を通じて、植物とコミュニケーションをとる。 植物とのコミュニケーション、植物水やり装置で水をあげる。植物は喋らないので、センサ類でIOTして見える化しよう(こじつけ)
要件定義
- 上記の目的を満たすにはキャラクターが植物の翻訳者、または植物の擬人化であることとする。(アイコンや喋り方によってキャラクター付けを行う)
- 植物の状態をチャットで連携されていること(周囲の温度、湿度をチャットによって教えてくれる)←予算の都合上、要件削除
- 植物に対して何かアクションできること(水やりを行うこと) としました。
機能の実装方法について
- チャットのフロントはlineのmessageAPIを使用する。
- チャットで話す機能についてはdialogflowによる会話フローの登録を行う。
- 植物へのアクション(水やり)はobnizで作る。
他にも選択肢はあるとは思いますが、使ったことないものを使う方向で選定しました。
水やり装置にかけたお金(概算)
材料 | 価格 |
---|---|
obniz | 6000円 |
水中ポンプ | 1000円 |
水中ポンプ用シリコンホース | 250円 |
工作用プラ板 | 500円 |
ペットボトル | いつも飲んでるから無料 |
ブレッドボードとか配線ケーブル | 昔の電子工作の流用品 |
合計 | 約7750円くらい |
作成手順のアウトライン
- フロント側lineのmessageAPIの登録
参考記事
[LINEのBot開発 超入門(前編) ゼロから応答ができるまで]URL: https://qiita.com/nkjm/items/38808bbc97d6927837cd#_reference-7f29bf79cd4c1bd986ce
- lineとdialogflowの登録と連携
参考記事
[LINEのBot開発 超入門(後編) メッセージの内容と文脈を意識した会話を実現する]URL: https://qiita.com/nkjm/items/4de41988969e6f17adcb
[チャットボットをAIでもっと素敵にする!自然言語処理の仕組み]URL: https://qiita.com/okajax/items/0534c92bb9b7f9bc1413
- obnizの水やり装置作成とハードAPIのwebhookによる連携
参考記事
[夏休みの工作におススメ!自動水やり機(Obniz+電動灯油ポンプ)の製作]URL: https://qiita.com/keicafeblack/items/7c667d5a9dcab9f56dd3
[猫好きエンジニアのIoT obnizを使った「遠隔ご飯あげマシーン」]URL: https://qiita.com/kakakaori830/items/099493aae7d7b1e71765
作ってみての所感
ハード側について
水やり装置のハード側を作り込むとソフトよりも結構時間とお金がかかる印象を受けました。今回の水やり装置の規模としては最小限の卓上で行える範囲として作ってみましたが、水やり装置の規模を卓上級から、プランター級、ベランダ級とスケーリングしていくとその分ポンプのスペックや、水を貯めておくタンク部分のコストが高くなってくると思います。スケールが大きくなるとポンプ側スペックの都合上電源供給がobnizとは別系統となって、フォトカプラでスイッチの入切を行う方式をとる設計になっていくのかなと思いました。 センサ類のスケーリングについて、今回は予算の都合上、温度や湿度のモニタリングは行いませんでした。しかし、育てる植物の目的によってはモニタリングする植物の数量に比例してセンサーを増加させるのか、全体を1つとして測定するのかを考える必要がありそうです。
ソフト側について
今回、コミュニケーションがテーマとなっていたため、当初はslackで何かしらのbotを作っていました。 Lineによるbot開発に踏み切ったのは、botのキャラクター化を行うにあたってLineは認知度が高く、よく知られるUIでbot感がないと感じたからです。 slackだとどうしても業務感があって、抵抗を覚えました。(業務では使ったことないんですけどね) LineのMessageAPIに関しては簡単に登録するだけの作業なので割愛します。ソフト側のメインはdialogflowの登録になるため、簡単な挨拶に対する返答、水やり機能を実装しています。とにかくdialogflowがすごくて驚いています。当初はherokuでnodejsによるELIZAもどきでも作ってみようかと思っていましたが、想定外に平日に時間が取れなくdialogflowに頼った次第です。ソフト側では特段困ったことはなかったです。 ランディングページとしてはhugoのテンプレートを使用しています。ここはあくまでQRコードへ導く用のためのページなのでコーディング技術評価ゼロと思っています。
ドメイン(植物のチャットによる管理)についての反省点
このアプリに関しては、elf-farmと友達登録していれば誰でも私の家の植物に水やりを行える機能があります。 ハード側の設計によっては水浸しになるような作りにもなるわけで、水やり機能の共同管理は難しそうだなと作りながら感じました。 わざわざLineによる命令実行するよりかは、完全にオートメーションにした方が良い機能だと思います。 水のやりすぎは根腐れの元にもなり、今の段階だと土の湿度管理もできないので闇雲に使うと植物にダメージを与えかねないので、現在は洗面器が植物の代用になっています。 こういった機能の共有化で遊びを考える場合は、何回アクセスしたかによって閾値を定めて実行条件が変わるような実装方法になるのだろうなと思いました。ツイッターで何十リツイートでイルミネーションが変わるとか、そういう企画が過去あったような気がしますね。
キャラクターについては、別途記事を書く予定です
2019/2/11提出段階からアイコン画像が変わる予定です。